package cn.edu.guet.service.login.impl;


import cn.edu.guet.bean.login.Result;
import cn.edu.guet.bean.login.User;
import cn.edu.guet.mapper.login.UserMapper;
import cn.edu.guet.service.login.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    //通过用户名和密码查询是否存在该用户
    @Override
    public User getUserId(String username, String password) {
        return userMapper.getUserId(username,password);
    }
    //给密码添加加密
    @Override
    public String encryptionMD5(String s) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");//获取MD5实例
            md.update(s.getBytes());//此处传入要加密的byte类型值
            byte[] digest = md.digest();//此处得到的是md5加密后的byte类型值
            /*
               下边的运算就是自己添加的一些二次小加密，记住这个千万不能弄错乱，
                   否则在解密的时候，你会发现值不对的（举例：在注册的时候加密方式是一种，
                在我们登录的时候是不是还需要加密它的密码然后和数据库的进行比对，但是
            最后我们发现，明明密码对啊，就是打不到预期效果，这时候你就要想一下，你是否
             有改动前后的加密方式）
            */
            int i;
            StringBuilder sb = new StringBuilder();
            for (int offset = 0; offset < digest.length; offset++) {
                i = digest[offset];
                if (i < 0)
                    i += 256;
                if (i < 16)
                    sb.append(0);
                sb.append(Integer.toHexString(i));//通过Integer.toHexString方法把值变为16进制
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }
    //
    @Override
    public User loginJudge(String username, String password) {
        password = encryptionMD5(password);
        User user = getUserId(username,password);
        return user;
    }
    //添加用户
    @Override
    public void  insert(User user) {
        userMapper.saveUser(user);
    }
    //通过用户名判断是否存在该用户
    @Override
    public Result getUserById(String username) {
        User user = userMapper.getUserById(username);
        if (user==null) {
            Result result = new Result("OK");
            return result;
        }else{
            Result result = new Result("F");
            return result;
        }
    }
    //判断是否存在该邮箱
    @Override
    public Result getUserByMail(String mail) {
        if(mail!="") {
            User user = userMapper.getUserByMail(mail);
            if (user == null) {
                Result result = new Result("OK");
                return result;
            } else {
                Result result = new Result("F");
                return result;
            }
        }
        Result result = new Result("F");
        return result;
    }

    @Override
    public User getUser(String username) {
        User user = userMapper.getUserById(username);
        return user;
    }
    //修改密码
    @Override
    public void changeUser(String mailname, String password) {
        userMapper.changeUser(mailname,password);
    }

}
